home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 February
/
EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso
/
earcd
/
comm2
/
termsorc.lha
/
Extras
/
Source
/
term-source.lha
/
Start.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-09-26
|
3KB
|
147 lines
/*
** Start.c
**
** The program entry point
**
** Copyright © 1990-1995 by Olaf `Olsen' Barthel
** All Rights Reserved
*/
#include <intuition/intuitionbase.h>
#include <workbench/workbench.h>
#include <exec/execbase.h>
#include <dos/dosextens.h>
#include <clib/intuition_protos.h>
#include <clib/exec_protos.h>
#include <clib/dos_protos.h>
#include <pragmas/intuition_pragmas.h>
#include <pragmas/exec_pragmas.h>
#include <pragmas/dos_pragmas.h>
#include <string.h>
/* Standard topaz.font/8. */
extern struct TextAttr DefaultFont;
/* exec.library base pointer. */
extern struct ExecBase *SysBase;
/* The appropriate machine type check. */
#if defined(CPU_ANY) || defined(CPU_any)
#define MACHINE_OKAY (1)
#endif
#if defined(CPU_68020) || defined(CPU_68030)
#define MACHINE_OKAY (SysBase -> AttnFlags & AFF_68020)
#endif
#if defined(CPU_68040)
#define MACHINE_OKAY (SysBase -> AttnFlags & AFF_68040)
#endif
/* Start():
*
* Program entry point, checks for the right CPU type and
* runs the main program if possible.
*/
LONG __saveds
Start(VOID)
{
/* Get SysBase. */
SysBase = *(struct ExecBase **)4;
/* Is the minimum required processor type and Kickstart 2.04 (or higher)
* available?
*/
if(MACHINE_OKAY && (SysBase -> LibNode . lib_Version > 37 || (SysBase -> LibNode . lib_Version == 37 && SysBase -> SoftVer >= 175)))
return(main());
else
{
register struct Process *ThisProcess = (struct Process *)SysBase -> ThisTask;
/* Is a Shell window available? */
if(ThisProcess -> pr_CLI)
{
register struct DosLibrary *DOSBase;
/* Show the message. */
if(DOSBase = (struct DosLibrary *)OpenLibrary("dos.library",0))
{
STRPTR String;
if(MACHINE_OKAY)
String = "Kickstart 2.04 or higher required.\a\n";
else
String = "MC68020 or higher required.\a\n";
Write(ThisProcess -> pr_COS,String,strlen(String));
CloseLibrary(DOSBase);
}
return(RETURN_FAIL);
}
else
{
register struct IntuitionBase *IntuitionBase;
register struct WBStartup *WBenchMsg;
/* Wait for startup message. */
WaitPort(&ThisProcess -> pr_MsgPort);
/* Get the message. */
WBenchMsg = (struct WBStartup *)GetMsg(&ThisProcess -> pr_MsgPort);
/* Show the message. */
if(IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library",0))
{
STATIC struct IntuiText SorryText = {0,1,JAM1,6,3,&DefaultFont,(UBYTE *)"Sorry",NULL};
struct IntuiText *Body;
UWORD Width;
if(MACHINE_OKAY)
{
STATIC struct IntuiText BodyText = {0,1,JAM1,5,3,&DefaultFont,(STRPTR)"Kickstart 2.04 or higher required.",NULL};
Body = &BodyText;
Width = 309;
}
else
{
STATIC struct IntuiText BodyText = {0,1,JAM1,5,3,&DefaultFont,(UBYTE *)"MC68020 or higher required.",NULL};
Body = &BodyText;
Width = 253;
}
AutoRequest(NULL,Body,NULL,&SorryText,NULL,NULL,Width,46);
CloseLibrary(IntuitionBase);
}
/* Return the startup message and exit. */
Forbid();
ReplyMsg((struct Message *)WBenchMsg);
}
}
}